#include<bits/stdc++.h>
using namespace std;
/*
排列问题 ：递归法求解的思路是先固定第一个元素，求剩下的全排列，求剩下的全排列时，固定剩余元素中的第一个元素，再求剩下元素的全排列，直到就剩一个元素停止。

例如求集合{1，2，3}的全排列。

　　1、固定元素1求{2，3}元素的全排列

　　　　（1）固定元素2，得到一个排列方式（1，2，3）

　　　　（2）固定元素3，得到一个排列方式（1，3，2）

       2、固定元素2求{1，3}元素的全排列

　　　　（1）固定元素1，得到一个排列方式（2，1，3）

　　　　（2）固定元素3，得到一个排列方式（2，3，1）

       3、固定元素3求{1，2}元素的全排列

              （1）固定元素1，得到一个排列方式（3，1，2）

　　　　（2）固定元素2，得到一个排列方式（3，2，1）

　　经过上述步骤即可得到以1为第一个元素的全排列，再分别将2，3固定为第一元素重复上面过程即可得到{1，2，3}的全排列

*/
class solution{
    public:
        void init(){
            gets(s);
            n = strlen(s);
            count = 0;
        }
        void swap_(char *s,int i,int j){
            char k=s[i];
            s[i] = s[j];
            s[j] = k;
        }
        void combine(char*s,int i,int j){
            if(i == j){
                puts(s);
                count++;
            }else{
                for(int k=i;k<=j;k++){//
                    swap_(s,i,k);
                    combine(s,i+1,j);//取k+1后位
                    swap_(s,i,k);
                }
            }
        }
        void main(){
            init();
            combine(s,0,n-1);
            printf("Total Avg= %ld",count);
        }
    private:
        char *s;
        long count;
        int n;
};
int main(int argc,char* argv[]){
    solution a;
    a.main();
}
